package xkp.lesson;

import java.io.*;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1",8888);
        //客户端只要是发送数据 使用输出流  基于socket对象
        //本质上是通过socket进行数据传输,至于选择什么流进行，视情况而定
       /* DataInputStream
        DataOutputStream  */
    /*    InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
        //推荐使用
        DataInputStream dataInputStream = new DataInputStream(inputStream);
        DataOutputStream dataOutputStream = new DataOutputStream(outputStream);*/
        //需要在c-s传输一个对象
        OutputStream outputStream = socket.getOutputStream();
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
        //ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
        Person person = new Person(20,"张三");
        objectOutputStream.writeObject(person);
        objectOutputStream.flush();
        objectOutputStream.close();
        socket.close();
        //客户端只要是接收数据 使用输入流  基于socket对象

        //如果在网络传输中只涉及到字节数据的收和发
        //使用BufferedInputStream/BufferedOutputStream最好

        //如果只涉及到字符数据的收和发
        //使用BufferedReadr/BufferedWriter最好

        //为什么使用DataInputStream与DataOutputStream
        //因为这两个流既能实现字符数据的收发  在传递字符的时候还能指定编码
        //也能实现字节数据的收发
    }
}
// 字节流可以处理字符数据
// 面对字符数据，什么时候使用字节流，什么时候使用字符流

// 如果不涉及到数据展示   如果是文件拷贝 字节流字符流都OK  但是如果想把文件中的数据读取并展示到控制台，则必须使用字符流